import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

class Solution{
    LinkedList<Integer> path=new LinkedList<>(); //存放符合条件的集合
    List<List<Integer>>result=new ArrayList<>(); //存放最后的结果集合
    boolean []used; //判断元素是否是遍历过的，设置标志
    public List<List<Integer>> permute(int[] nums){
        if(nums.length==0){
            return result;
        }
       used=new boolean[nums.length]; //数组元素对应的长度
       dfs(nums);
       return result;
    }
    public void dfs(int[] nums){
        if(path.size()== nums.length){
            result.add(new LinkedList<>(path));
            return;
        }
        for(int i=0;i<nums.length;i++){
            //遍历过的元素
            if(used[i]){
                continue;
            }else{
                used[i]=true;
                path.add(nums[i]);
                dfs(nums);
                path.removeLast();
                used[i]=false;
            }
        }
    }

    public static void main(String[] args) {
        Solution s=new Solution();
        int[] nums3={1,2,3,5};
        System.out.println(s.permute(nums3)+"  ");
    }
}